草庐IT

Java Swingworker 和多线程

全部标签

java - JVM退出后守护线程如何存活?

我正在阅读关于Java的setDaemon()方法的文档,当我读到JVM没有等待守护线程完成就退出时感到困惑。但是,由于本质上守护线程是JavaThread,它可能依赖于在JVM上运行来实现其功能,如果JVM在守护线程完成之前退出,守护线程如何生存? 最佳答案 他们无法生存。当所有线程(守护程序线程除外)都已死亡时,JVM将退出。当您启动您的应用程序时,JVM将启动一个单一的非守护线程来运行您的静态main方法。一旦main方法退出,这个主线程就会结束,如果你没有生成其他非守护线程,JVM就会退出。但是,如果您启动了另一个线程,JV

java - 多线程 - 多个用户

当单个用户访问应用程序时,可以使用多个线程,如果存在多个内核,它们可以并行运行。如果只有一个处理器,那么线程将一个接一个地运行。当多个用户访问一个应用程序时,线程是如何处理的? 最佳答案 我可以从Java的角度来谈,所以你的问题是“当多个用户访问一个应用程序时,线程是如何处理的?”。答案是这完全取决于您的编程方式,如果您使用的是某些网络/应用程序容器,它们会提供线程池机制,您可以在其中拥有多个线程来处理服务器用户请求,每个用户发起一个请求,然后依次发起一个请求由一个线程处理,所以如果有10个并发用户,将有10个线程同时处理10个请求

java - 如何在 Java 并行程序中获得理想的线程数?

我需要在批处理程序中获得理想数量的线程,该批处理程序在支持并行模式的批处理框架中运行,例如SpringBatch中的并行步骤。据我所知,执行程序步骤的线程太多并不好,它可能会对程序的性能产生负面影响。一些因素可能会导致性能下降(上下文切换、使用共享资源时的竞争条件(锁定、同步..)......(还有其他因素吗?))。当然,获得理想线程数的最佳方法是对我进行实际程序测试以调整程序的线程数。但在我的情况下,真正的测试并不是那么容易,因为测试需要很多东西(人员、测试安排、测试数据等),这些对我现在来说太难准备了。因此,在进行实际测试之前,我想尽可能地了解如何获得我的程序的可猜测理想线程数。我

java线程和主线程

让主线程等待所有线程完成的最佳方法是什么?for(inti=0;i 最佳答案 创建一个列表并等待所有。Listthreads=newArrayList();for(inti=0;i然而,使用ExecutorService可能是处理线程池的一种更优雅的方式。ExecutorServicees=Executors.newCachedThreadPool();for(inti=0;i 关于java线程和主线程,我们在StackOverflow上找到一个类似的问题:

java - 对象中正在运行的线程是否会阻止它在 Java 中被垃圾收集?

给定代码:newThread(newBackgroundWorker()).start();直觉上感觉BackgroundWorker实例在线程退出之前应该不会受到GC的影响,但事实真的如此吗?为什么?编辑:所有这些热度基本上都是由于我在同一个帖子中至少提出了两个不同的问题而产生的。标题中的问题有一个答案,代码示例指向不同的方向——根据内联有两种可能的结果。发布的答案真的很棒。我将授予SoftwareMonkey绿色复选框。请注意Darron的回答同样有效,但SoftwareMonkey解释了我遇到的问题;这是对我有用的答案。谢谢大家让这件事成为一件令人难忘的事情;)

java - 使用多核处理器是否需要多线程算法?

我只是想知道如果算法必须使用多核处理器,我们是否真的需要多线程算法,或者即使我们的算法是顺序的,jvm是否会使用多核处理器?更新:相关问题:Muti-Threadedquickormergesortinjava 最佳答案 我不相信任何当前的生产JVM实现都执行自动多线程。它们可能使用其他核心进行垃圾收集和其他一些内务管理,但如果您的代码是按顺序表示的,则很难自动并行化它并仍然保持精确的语义。可能有一些实验性/研究型JVM试图并行化JIT可能发现的并行性令人尴尬的代码区域,但我还没有听说过用于生产系统的类似情况。即使JIT确实发现了这

java - 在 Java 中停止线程?

这个问题在这里已经有了答案:Howtoabortathreadinafastandcleanwayinjava?(15个答案)关闭去年。我正在编写一段连接到服务器的代码,使用该连接生成一堆线程并执行一堆“东西”。在某些情况下连接失败,我需要停止一切并从头开始使用一个新对象。我想在对象之后清理,但在线程上调用thread.stop,但这种方法似乎已被弃用。推荐的替代方法是什么?我应该为每个线程编写自己的清理和退出方法吗?将线程设置为空?或者是其他东西?

多线程系列(十一) -浅析并发读写锁StampedLock

一、摘要在上一篇文章中,我们讲到了使用ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题。如果继续深入的分析ReadWriteLock,从锁的角度分析,会发现它有一个潜在的问题:如果有线程正在读数据,写线程准备修改数据的时候,需要等待读线程释放锁后才能获取写锁,简单的说就是,读的过程中不允许写,这其实是一种悲观的读锁。为了进一步的提升程序并发执行效率,Java8引入了一个新的读写锁:StampedLock。与ReadWriteLock相比,StampedLock最大的改进点在于:在原先读写锁的基础上,新增了一种叫乐观读的模式。该模式并不会加锁,因此不会阻塞线程,程序会有更

精简实现、线程安全:C#通用单例泛型基类助你轻松创建单例模式

 概述:该通用单例泛型基类使用C#实现,线程安全,通过泛型参数和Lazy实现简化的单例模式。优点包括线程安全、泛型通用性、简化实现、以及延迟加载的特性。优点:线程安全: 使用Lazy确保了线程安全的延迟初始化,避免了在多线程环境下可能导致的竞态条件问题。泛型通用性: 通过泛型参数,该单例基类适用于任何类,提高了代码的通用性和可重用性,避免了为每个类都实现单例模式的重复劳动。简化实现: 泛型和Lazy的使用简化了单例模式的实现。派生类只需继承这个基类,即可获得单例模式的特性,减少了冗余的代码。延迟加载: 通过延迟加载的特性,实例在第一次被请求时才被创建,提高了性能,避免了不必要的资源浪费。以下是

Java 100个左右的并行线程,内存管理

我正在编写一个创建大约100个线程的优化算法。目前,我一次启动它们(for循环),然后我告诉每个线程它应该join()。我现在的问题是每个线程都使用了很多内存,所以堆空间异常不会花很长时间。我想要某种调度,但不知道如何实现它。我有这样的想法:启动10个线程,每次其中一个完成时启动一个新线程。这样每次总是运行10个线程,直到没有线程为止。有人有想法或知道如何实现这样的事情吗?非常感谢您和来自科隆的问候马可 最佳答案 使用ThreadPoolExecutor具有适当的最大池大小。 关于Jav